package com.zz.common.codeGenerator.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zz.common.base.dto.PageListResultDto;
import com.zz.common.base.param.QueryParam;
import com.zz.common.codeGenerator.dto.GenTableColumnDto;
import com.zz.common.codeGenerator.dto.GenTableDto;
import com.zz.common.codeGenerator.entity.GenTable;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 代码生成业务表 服务接口
 *
 * @author zhang.lei
 * @since 2025-08-18 20:31:13
 */
public interface GenTableService extends IService<GenTable> {

    /**
     * 分页查询
     *
     * @param genTableDto 查询参数
     * @return PageListResultDto<GenTableDto>
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    PageListResultDto<GenTableDto> queryWithPage(GenTableDto genTableDto, QueryParam queryParam);

    /**
     * 分页查询
     *
     * @param genTableDto 查询参数
     * @return List<GenTableDto>
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableDto> queryWithNoPage(GenTableDto genTableDto);

    /**
     * 查询所有数据
     *
     * @return
     */
    List<GenTableDto> queryAll();

    /**
     * 根据id查询
     *
     * @param id 主键
     * @return GenTableDto
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableDto queryById(String id);

    /**
     * 根据主键查询单表数据
     *
     * @param id 主键
     * @return List<GenTableDto>
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableDto> queryByIds(List<String> id);

    /**
     * 保存
     *
     * @param genTableDto 对象
     * @return GenTableDto
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableDto save(GenTableDto genTableDto);

    /**
     * 批量保存
     *
     * @param genTableDtos 对象
     * @return List<GenTableDto>
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableDto> saveBatch(List<GenTableDto> genTableDtos);

    /**
     * 修改
     *
     * @param genTableDto 对象
     * @return GenTableDto
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableDto modify(GenTableDto genTableDto, String currentLocale);

    /**
     * 批量修改
     *
     * @param genTableDtos 对象
     * @return List<GenTableDto>
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableDto> modifyBatch(List<GenTableDto> genTableDtos);

    /**
     * 删除
     *
     * @param id 主键
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void delete(String id);

    /**
     * 删除
     *
     * @param ids 主键
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void deleteBatch(List<String> ids);

    /**
     * 插入
     *
     * @param genTableDto 对象
     * @return GenTableDto
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableDto insert(GenTableDto genTableDto);

    /**
     * 指定主键插入
     *
     * @param genTableDto 对象
     * @return GenTableDto
     * @create: 2025-08-18 20:31:13
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableDto insertWithId(GenTableDto genTableDto);


    /**
     * 查询数据表、分页
     * @param genTableDto
     * @param queryParam
     * @return
     */
    PageListResultDto<GenTableDto> selectDbTables(GenTableDto genTableDto, QueryParam queryParam);

    /**
     * sql驱动数据生成
     * @param sql
     */
    void createTableBySql(String sql, String currentLocale);

    /**
     * 导入表
     *
     * @param tableNames
     */
    void importTable(List<String> tableNames, String currentLocale);

    /**
     * 预览
     *
     * @param tableId
     * @return
     */
    Map<String, String> preview(String tableId);

    /**
     * 同步数据库
     *
     * @param tableName
     */
    void synchDb(String tableName, String currentLocale);

    /**
     * 批量生成代码
     * @param tableIds
     */
    void batchGenCode(List<String> tableIds) throws IOException;

    /**
     * 批量物理删除
     *
     * @param ids
     */
    void batchTureDelete(List<String> ids);

    /**
     * 查询表字段信息
     * @param tableName
     * @return
     */
    List<GenTableColumnDto> queryColumnsByTableName(String tableName);
}
